Streaming data provides increased functionality to a user such that the user may quickly receive the data. Without streaming, if the entire amount of the data was needed to be received from a source device before it was output by a client device, the user may experience a delay in rendering the data at the client device. By streaming the data, the delay encountered by the user may be lessened. Data streaming may be used to provide “real-time” rendering of data.
To stream data, data is transmitted from a source device in a streaming or continuous fashion, generally using data packets, for rendering at a client device as the data arrives, as opposed to data that is not rendered until an entire file which includes the data is available at the client device. Streaming may be used for a variety of types of data, such as video data, audio data, media data, and the like. A stream of video data provides a sequence of “moving images” that are transmitted and displayed when the images arrive. Likewise, a stream of audio data provides sound data that is played as the audio data arrives. A stream of media data includes both audio and video data.
Previously, use of peripheral devices which involved the use of streams of data was accomplished in a local manner. For example, peripheral devices, such as source peripheral devices (such as cameras, microphones, and capture cards) and rendering devices (such as display monitors and speakers) were physically attached to a single computing device so that data streamed by the source peripheral device could be rendered by the rendering device. Rendering the data may include transforming the data into a form which is suitable to be output in a tangible form by a rendering device, such as displayed on a display device, played by an audio speaker, and so on.
If remote access to the streams of data was desired, the remote access was limited by the local manner in which the data was provided. For example, to provide remote access to data which was streamed by the source peripheral device, the data was output, compressed, decompressed, rendered, captured, and recompressed before it was streamed to a client device. However, when capturing and recompressing the data before streaming to the client device, portions of the data as output by the source peripheral device may be lost. Therefore, the data which was streamed to the client device was degraded. This reduced the experience of the user when viewing and/or listening to the data, such as by experiencing choppy movement in a display of video data and incomplete playback of audio data. Additionally, capturing and recompressing the data by the source device is resource intensive, thereby limiting such functionality to devices having sufficient processor and data storage resources. Further, capturing and recompressing the rendered data may slow the streaming of the data to the client device, thereby limiting the “real-time” nature of the data. Moreover, if more than one destination was desired for streams of data, the amount of resources which were used to support multiple streams was further increased.
Accordingly, there is a continuing need to improve the streaming of data.